package com.radar;

import cn.hutool.core.io.FileUtil;
import com.radar.license.LicenseCreator;
import com.radar.license.SerialNumberUtil;
import com.radar.license.dto.License;
import com.radar.license.dto.LicenseExtraModel;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.scheduling.annotation.EnableScheduling;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Calendar;
import java.util.Date;

@EnableScheduling
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
public class Application {

	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
//		generateKey(args[0],Integer.parseInt(args[1]));
//		generateKey("BFEBFBFF000906ED",12);
	}


	public static Object generateKey(String cpuid, int month) {
		// 生成license需要的一些参数
		License param = new License();
		// 证书授权主体
		param.setSubject("licenseTest");
		// 私钥别名
		param.setPrivateAlias("radarflow_privatekey");
		// 私钥密码（需要妥善保管，不能让使用者知道）
		param.setKeyPass("Zhongz62");
		// 访问私钥库的密码
		param.setStorePass("Zhongz62");
		// 证书存储地址

		String file = System.getProperty("user.dir") + File.separator +"license.lic";
		System.out.println(file);
		param.setLicensePath(file);
		// 私钥库所在地址
		// cp private key
		try (InputStream provinceStream = Application.class.getClassLoader().getResourceAsStream("radarflow_private_key.store")) {
			FileUtil.writeFromStream(provinceStream, System.getProperty("java.io.tmpdir") + File.separator + "radarflow_private_key.store");
		} catch (IOException e) {
			e.printStackTrace();
		}
		param.setPrivateKeysStorePath(System.getProperty("java.io.tmpdir") + File.separator + "radarflow_private_key.store");
		// 证书生效时间
		Calendar issueCalendar = Calendar.getInstance();
		param.setIssuedTime(issueCalendar.getTime());
		// 证书失效时间
		Calendar expiryCalendar = Calendar.getInstance();
		// 设置当前时间
		expiryCalendar.setTime(new Date());
		// 往后延长一年 = 授权一年时间
		month = month < 0 || month == 9999 ? 12 * 10 : month;
		expiryCalendar.add(Calendar.MONTH, month);
		param.setExpiryTime(expiryCalendar.getTime());
		// 用户类型
		param.setConsumerType("user");
		// 用户数量
		param.setConsumerAmount(1);
		param.setLicenseExtraModel(new LicenseExtraModel());
		cpuid = cpuid == null || cpuid.equals("") ? SerialNumberUtil.CPU() : cpuid;
		param.getLicenseExtraModel().setCpuid(cpuid);
		// 描述
		param.setDescription("license");
		LicenseCreator licenseCreator = new LicenseCreator(param);
		// 生成license
		return licenseCreator.generateLicense();
	}

}